
#ifndef SX_STORED_PHYSICAL_REPRESENTATION_H
#define SX_STORED_PHYSICAL_REPRESENTATION_H

#include <sxPhysicalRepresentation.h>
#include <sxDiscreteState.h>
#include <sxArrayList.h>

namespace Sx {
namespace Physics {

class StoredPhysicalRepresentation : public PhysicalRepresentation<DiscreteState> {
public:
	StoredPhysicalRepresentation();
	StoredPhysicalRepresentation(const StoredPhysicalRepresentation& stored);
	virtual ~StoredPhysicalRepresentation();

	/*
	 * Since this class represents a static representation of the data that may
	 * be stored in a discrete physical representation, the construct and
	 * update functions do not modify the data in any way. This class is to be
	 * used as a storage mechanism.
	 */
	bool construct();
	void update(double dt);

	bool setData(const StoredPhysicalRepresentation& data);

	StoredPhysicalRepresentation& operator = (const StoredPhysicalRepresentation& stored);

	/* Public access to vertices for performance. */
	Util::ArrayList<Eigen::Vector3d> vertices;
};

}

}

#endif
